Add a drag-end callback
authorMatthias Clasen <mclasen@redhat.com>
Fri, 11 Dec 2015 15:50:25 +0000 (10:50 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 11 Dec 2015 15:50:25 +0000 (10:50 -0500)
This will be helpful in figuring out life-cycle issues
with icon widgets.

tests/testdnd2.c

index eb4c1745fef302ecb44cff3d72f7a418d5d24f16..0447dc07f3313ed3e90f0a1d3a87024e9ef4f98a 100644 (file)
@@ -199,6 +199,18 @@ spinner_drag_begin (GtkWidget      *widget,
                           "active",  TRUE,
                           NULL);
   gtk_drag_set_icon_widget (context, spinner, 0, 0);
+  g_object_set_data (G_OBJECT (context), "spinner", spinner);
+}
+
+static void
+spinner_drag_end (GtkWidget      *widget,
+                  GdkDragContext *context,
+                  gpointer        data)
+{
+  GtkWidget *spinner;
+
+  spinner = g_object_get_data (G_OBJECT (context), "spinner");
+  gtk_widget_destroy (spinner);
 }
 
 void
@@ -225,6 +237,7 @@ make_spinner (void)
   gtk_drag_source_add_text_targets (ebox);
 
   g_signal_connect (ebox, "drag-begin", G_CALLBACK (spinner_drag_begin), spinner);
+  g_signal_connect (ebox, "drag-end", G_CALLBACK (spinner_drag_end), spinner);
   g_signal_connect (ebox, "drag-data-get", G_CALLBACK (spinner_drag_data_get), spinner);
 
   gtk_container_add (GTK_CONTAINER (ebox), spinner);